home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-12-16 | 3.8 KB | 95 lines | [TEXT/pdos] |
- Apple II
- Technical Notes
- _____________________________________________________________________________
- Developer Technical Support
-
-
- Apple IIGS
- #16: Notes on Background Printing
-
- Revised by: Mike Askins November 1988
- Written by: Mike Askins June 1987
-
- This Technical Note attempts to pinpoint some of the common problems people
- encounter when using background printing as available through the serial
- firmware.
- _____________________________________________________________________________
-
-
- Calling Sequence
-
- Init call Starts the serial firmware
- SetOutBuff Specifies a buffer to place data to be printed
- Places data in buffer ( amount < buffer size)
- SendQueue Starts the background printing process
-
-
- Correctly Making the SendQueue Call
-
- The Apple IIGS Firmware Reference incorrectly documents the parameters you
- pass to SendQueue. The correct specification of the recharge address does not
- correspond to the standard method of passing a full 32-bit address. Set the
- parameters as follows:
-
- SendQueue
- Launches background printing.
-
- CmdList DFB $04 ;Parameter Count
- DFB$18 ;Command Code
- DW $00 ;Result Code (output)
- DW DataLength
- DFB RechargeAddress (bank)
- DFB RechargeAddress (high)
- DFB RechargeAddress (low)
- DFB $00
-
-
- Using the Default Buffer
-
- You can use the area which the firmware reserves for transparent buffering to
- place data for background printing. This is advantageous since the firmware
- calls the Memory Manager to allocate space for the buffer (you must allocate
- the space from the Memory Manager if you use the SetOutBuff call to set up a
- buffer).
-
- To use the serial firmware's buffer, you must first enable buffering by
- initializing the port with PINIT and sending it the string "^IBE" with PWRITE.
- Once you enable buffering, call GetOutBuff to find the size and location of
- the buffer, then place your data (buffersize - 1) in the buffer and call
- SendQueue.
-
-
- Data Size
-
- Make sure that the amount of data you place in the buffer is at least one byte
- less than the size of the buffer since the firmware uses one byte of the
- buffer for bookkeeping purposes; if you place too much data in the buffer, it
- will continually print the buffer's contents and never call your recharge
- routine.
-
-
- The Recharge Routine
-
- You should treat the recharge routine as an interrupt handler and execute it
- at interrupt time. Interrupts are disabled at this time, and it is illegal to
- enable them within the recharge routine. Like all interrupt handlers, the
- recharge routine should take care of its business as quickly as possible then
- exit; any excessive delays cause interrupt dependent processes (e.g.,
- AppleTalk) to fail. You should also remember that most of the system code is
- non-reentrant; you should use the Scheduler when calling system code which may
- have been running when the serial interrupt that invoked the recharge routine
- occurred.
-
- The serial firmware is not generally reentrant and does not interact with the
- Scheduler. If you want to make serial firmware calls (through $C1xx, $C2xx)
- from your recharge routine, you must preserve MSLOT (the byte at $0007F8)
- across those calls. Be aware that any non-recharge code must not make calls
- to the serial firmware that will disrupt the background printing process;
- sending the string "^BD" (disable buffering command), for example, is
- guaranteed to confuse a running background printing process.
-
-
- Further Reference
- o Apple IIGS Firmware Reference
-
-